//
//impl <A: TraitB + TraitC, D: TraitE + TraitF> MyTrait<A, D> for YourType {} 
// ==> 
//impl <A, D> MyTrait<A, D> for YourType where 
//    A: TraitB + TraitC
//    B: TraitE + TraitF  {
//}


use std::fmt::Debug;

trait PrintInOption {
    fn print_in_option(self);
}

//NOTE:  Type<T>: Trait 
impl<T> PrintInOption for T where 
    Option<T>: Debug { 
    fn print_in_option(self){
        println!("{:?}", Some(self));
    }
}

pub fn main(){
    let vec = vec![1, 2, 3];
    vec.print_in_option();
}
